Android ViewPager2总结 您所在的位置:网站首页 viewpager offscreenpagelimit Android ViewPager2总结

Android ViewPager2总结

2023-01-29 11:24| 来源: 网络整理| 查看: 265

文章目录 ViewPager2总结概述常用APIViewPager2实现引导页ViewPager2+Fragment+TabLayout代码下载

ViewPager2总结 概述

ViewPager2是一个增强版的ViewPager,ViewPager2是基于RecyclerView+PagerSnapHelper实现的,解决了ViewPager的一些弊端,同时加入一些新特性。

常用API //设置分页方向 setOrientation(@Orientation int orientation) //定位指定页面 setCurrentItem(int item) setCurrentItem(int item, boolean smoothScroll) //设置预加载页数 setOffscreenPageLimit(@OffscreenPageLimit int limit) //禁止滑动 setUserInputEnabled(boolean enabled) //模拟滑动 beginFakeDrag() fakeDragBy(float offsetPxFloat) //停止模拟 endFakeDrag() //全部刷新 notifyDataSetChanged(); //局部刷新 notifyItemChanged(int position) //监听页面变化 registerOnPageChangeCallback(@NonNull OnPageChangeCallback callback) //删除监听 unregisterOnPageChangeCallback(@NonNull OnPageChangeCallback callback) ViewPager2实现引导页

GuideAdapter

public class GuideAdapter extends RecyclerView.Adapter { private final LayoutInflater inflater; private final int[] mImgIds; public GuideAdapter(Context context, int[] imgIds) { inflater = LayoutInflater.from(context); mImgIds = imgIds; } @NonNull @Override public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { return new MyViewHolder(inflater.inflate(R.layout.item_guide, parent, false)); } @Override public void onBindViewHolder(@NonNull MyViewHolder holder, int position) { holder.imageView.setImageResource(mImgIds[position]); } @Override public int getItemCount() { return mImgIds.length; } static class MyViewHolder extends RecyclerView.ViewHolder { private final ImageView imageView; public MyViewHolder(@NonNull View itemView) { super(itemView); imageView = (ImageView) itemView; } } }

GuideActivity

public class GuideActivity extends AppCompatActivity { private int[] imgIds = {R.drawable.a1, R.drawable.a2, R.drawable.a3, R.drawable.a4}; private LinearLayout indicator; private LinearLayout indicator2; private ViewPager2 viewPager2; private ArrayList dotList; private Context context; private int distance; private View point; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_guide); context = this; initViews(); initData(); indicator2.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { indicator2.getViewTreeObserver().removeOnGlobalLayoutListener(this); distance = indicator2.getChildAt(1).getLeft() - indicator2.getChildAt(0).getLeft(); } }); viewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { super.onPageScrolled(position, positionOffset, positionOffsetPixels); int leftMargin = (int) (distance * (position + positionOffset)); RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) point.getLayoutParams(); params.leftMargin = leftMargin; point.setLayoutParams(params); } @Override public void onPageSelected(int position) { super.onPageSelected(position); for (int i = 0; i dotList.get(i).setSelected(true); } else { dotList.get(i).setSelected(false); } } } @Override public void onPageScrollStateChanged(int state) { super.onPageScrollStateChanged(state); } }); } private void initViews() { indicator = findViewById(R.id.indicator); indicator2 = findViewById(R.id.indicator2); viewPager2 = findViewById(R.id.viewPager2); point = findViewById(R.id.point); GuideAdapter mAdapter = new GuideAdapter(this, imgIds); viewPager2.setAdapter(mAdapter); } private void initData() { int width = UiUtils.dp2px(context, 10); for (int i = 0; i params.leftMargin = width; } dot.setLayoutParams(params); indicator.addView(dot); } dotList = new ArrayList(imgIds.length); for (int i = 0; i params.leftMargin = width; } else { dot.setSelected(true); } dot.setLayoutParams(params); indicator2.addView(dot); dotList.add(dot); } } } ViewPager2+Fragment+TabLayout

XML布局

SimpleFragment

public class SimpleFragment extends Fragment { private String desc; public static SimpleFragment newInstance(String desc) { SimpleFragment fragment = new SimpleFragment(); Bundle args = new Bundle(); args.putString("desc", desc); fragment.setArguments(args); return fragment; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getArguments() != null) { desc = getArguments().getString("desc"); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_simple, container, false); } @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); TextView content = view.findViewById(R.id.content); content.setText(desc); } }

TabActivity

public class TabActivity extends AppCompatActivity { private ViewPager2 viewPager2; private TabLayout tabLayout; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_tab); viewPager2 = findViewById(R.id.viewPager2); tabLayout = findViewById(R.id.tabLayout); ArrayList fragmentList = new ArrayList(); fragmentList.add(SimpleFragment.newInstance("AAA")); fragmentList.add(SimpleFragment.newInstance("BBB")); fragmentList.add(SimpleFragment.newInstance("CCC")); fragmentList.add(SimpleFragment.newInstance("DDD")); ArrayList titleList = new ArrayList(); titleList.add("One"); titleList.add("Two"); titleList.add("Three"); titleList.add("Four"); TabAdapter mAdapter = new TabAdapter(this, fragmentList); viewPager2.setAdapter(mAdapter); new TabLayoutMediator(tabLayout, viewPager2, new TabLayoutMediator.TabConfigurationStrategy() { @Override public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) { tab.setText(titleList.get(position)); } }).attach(); } }

TabAdapter

public class TabAdapter extends FragmentStateAdapter { private final ArrayList mFragmentList; public TabAdapter(@NonNull FragmentActivity fragmentActivity, ArrayList fragmentList) { super(fragmentActivity); mFragmentList = fragmentList; } @NonNull @Override public Fragment createFragment(int position) { return mFragmentList.get(position); } @Override public int getItemCount() { return mFragmentList.size(); } } 代码下载


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有